package com.malou.server.ventas.movimiento.salida;

import java.sql.SQLException;
import java.util.List;

import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.malou.client.ventas.movimiento.salida.MovimientoSalida;
import com.malou.server.base.Conexion;
import com.malou.server.base.util.GxtGridPaginate;
import com.malou.server.ventas.ingresostock.IngresoStocks;
import com.malou.server.ventas.serie.Series;

public class MovimientoSalidas {
	private static SqlMapClient sqlMap = null;
	public static Integer errorTipo = 0;
	public static String modeloPrenda = "";
	private static Integer tipodocumento_id=3;////3 es tipodocumento_id de  "proforma 3"
	public static Integer tienda_id = null;

	@SuppressWarnings("unchecked")
	public static PagingLoadResult<MovimientoSalida> getPaginate(
			GxtGridPaginate paginate) {

		sqlMap = Conexion.getSqlMap();
		paginate.setLimit();

		if (paginate.order.equals("")) {
			paginate.order = " order by id desc";
		}
		List<MovimientoSalida> data = null;
		try {
			data = sqlMap.queryForList("paginateMovimientoSalida", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new BasePagingLoadResult<MovimientoSalida>(data,
				paginate.offset, count(paginate));
	}

	public static Integer count(GxtGridPaginate paginate) {
		Integer count = null;
		try {
			count = (Integer) sqlMap.queryForObject("countMovimientoSalida",
					paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return count;
	}

	public static boolean save(List<MovimientoSalida> list) {
		boolean retorno = true;
		sqlMap = Conexion.getSqlMap();

		try {

			sqlMap.startTransaction();

			IngresoStocks.sqlMap = sqlMap;
			Series.sqlMap = sqlMap;
			
			if (Series.hasSerie(tienda_id, tipodocumento_id)) {
				for (MovimientoSalida me : list) {
					
					me.setTienda_id(tienda_id);
					me.setNumero(Series.actualizarNumeracion(me.getTienda_id(),tipodocumento_id ));

					if (IngresoStocks.hasStock(me.getModeloprenda_id(),
							me.getCantidad(), tienda_id)) {
						sqlMap.insert("insertMovimientoSalida", me);
						IngresoStocks.disminuyeStockTienda(
								me.getModeloprenda_id(), me.getCantidad(),
								tienda_id);
					} else {
						sqlMap.endTransaction();
						retorno = false;
						errorTipo = 1; // stock insuficiente
						modeloPrenda = me.getModeloprenda();
						break;
					}
				}

				
			}else{
				retorno = false;    
    		    errorTipo = 2; //no existe serie
			}
			
			if (retorno) {
				sqlMap.commitTransaction();
			}

		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();
		}

		try {
			sqlMap.endTransaction();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return retorno;
	}
}
